package common;

import java.io.File;
import javax.swing.JTree;

/**
 * Représente le contenu d'un répertoire sous la forme d'un arbre (JTree).
 */
@SuppressWarnings("serial")
public class JTreeExplorer extends JTree {

	/**
	 * Le répertoire courant que représente l'arbre.
	 */
	private String _directory;

	/**
	 * Un modèle de données pour peupler le JTree.
	 * Ce modèle est une implémentation d'un TreeModel, dédié à l'arborescence d'un système de fichiers. 
	 */
	private TreeModelExplorer _treeModel;

	/**
	 * Crée une nouvelle instance de JTreeExplorer. Aucun répertoire n'est chargé.
	 */
	public JTreeExplorer()
	{
		initializeComponents();
		setDirectory(System.getProperty("user.home"));
	}

	/**
	 * Crée une nouvelle instance de JTreeExplorer. Le répertoire source spécifié est chargé.
	 * @param directory
	 * Le répertoire source à ouvrir pendant l'instanciation.
	 */
	public JTreeExplorer(String directory)
	{
		initializeComponents();
		setDirectory(directory);
	}

	/**
	 * Initialise tous les composants communs aux différents constructeurs
	 */
	private void initializeComponents()
	{
		setEditable(true);
	}

	/**
	 * Obtient le chemin vers le répertoire représenté dans ce JTreeExplorer.
	 * @return
	 * Retourne une chaîne de caractères qui représente un chemin absolu vers le répertoire physique observé dans ce JTreeExplorer.
	 */
	public String getDirectory() {
		return _directory;
	}

	/**
	 * Définit le chemin du répertoire représenté dans ce JTreeExplorer.
	 * @param directory
	 * Le chemin du répertoire racine à afficher dans le JTree
	 */
	public void setDirectory(String directory) {
		_directory = directory;
		refresh();
	}
	
	/**
	 * Met à jour l'arborescence de fichiers du composant.
	 */
	public void refresh()
	{
		if (_directory != null)
		{
			_treeModel = new TreeModelExplorer(new File(_directory));
		}
		else
		{
			_treeModel = null;
		}
		setModel(_treeModel);
	}
}
